package com.gofun.framework.redis;


import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * Redis 缓存接口
 * @author litianyi
 *
 * 2016年1月30日
 */
public interface RedisService {
	
	/**
	 * 秒
	 */
	public static final Integer SECOND = 1;
	
	/**
	 * 分钟
	 */
	public static final Integer MINUTE = 60 * SECOND;
	
	/**
	 * 小时
	 */
	public static final Integer HOUR = 60 * MINUTE;
	
	/**
	 * 12小时
	 */
	public static final Integer HALF_DAY = 12 * HOUR;
	
	/**
	 * 日:24小时
	 */
	public static final Integer DAY = 24 * HOUR;
	
	

	/**
	 * 添加一个缓存，过期时间为1个月
	 * @param key
	 * @param object
	 */
	public void set(String key, Object object);
	
	/**
	 * 添加一个缓存，指定缓存过期时间
	 * @param key			缓存KEY
	 * @param object		缓存值
	 * @param activeTime	有效时常，单位为秒
	 */
	public void set(String key, Object object, long activeTime);
	
	/**
	 * 获取一个缓存值
	 * @param key
	 * @return
	 */
	public Object get(String key);
	
	/**
	 * 删除缓存
	 * @param key
	 */
	public void delete(String key);
	/**
	 * 返回给定 key 的旧值。 当 key 没有旧值时，即 key 不存在时，返回 nil 。当 key 存在但不是字符串类型时，返回一个错误。 
	 * @param key
	 * @param value
	 * @param timeout 秒
	 * @return
	 */
	Object getAndSet(String key, Object value, long timeout);

	/**
     * bitmap
     * @param key
     * @param offset 例： 手机号
     * @return
     */
	boolean getBit(String key, long offset);
	/**
     * bitmap
     * @param key
     * @param offset 例： 手机号
     * @param value  true  false
     * @return
     */
	boolean setBit(String key, long offset, boolean value);
	
	/**
	 * 原子增加
	 * @param key
	 * @param delta
	 * @return
	 */
	public int increment(String key, long delta, long timeout);
	
	
	public int boundValueOps(String key);

	public Long leftPush(String key, String value);

	public String rightPopAndLeftPush(String sourceKey, String destinationKey);

	public String rightPop(String key);

	public Long length(String key);

	public Long rightPush(String key, String value);

	public Long ttl(String key);

	public Long increment(String name, String key, Long offset);

	public Boolean expire(String keyName, Long time, TimeUnit unit);

	public Map<Object,Object> getAllHashVal(String namespace);

	public void addHash(String loginRedisName, String userID, String json , Integer USER_TIME_OUT);

}
